Unity渲染管线(四) 渲染路径(待完善)

前言

接下来我们要学习一下 SRP ,真正地从头开始渲染一个物体(虽然没那么底层啦),在这之前我们要先对一些概念进行一下梳理,这节课是对 Unity 中 不同的渲染路径进行梳理。

参考文章

渲染路径概览

在 Unity 里,渲染路径决定了光照是如何应用到 Unity Shader 中的。

​ ——Unity Shader 入门精要

指定了不同的渲染路径,Unity 中的渲染管线才知道如何将光源、光照信息传到 Shader 中供开发者使用。

目前 Unity 的主流渲染路径是 前向渲染路径 和 延迟渲染路径,默认的都是前向渲染路径,LWRP 是支持前向或延迟渲染,我们在第二篇文章 LWRP 的使用中创建的渲染器也是 Forward Renderer。

前向渲染路径

  • 原理:先对图元进行深度测试,如果通过则进行光照计算。对于每个逐像素光照,都需要进行一次,如果有N个物体,M个逐像素光源,则需要进行MxN个Pass。相当于是每判断一次进行一次渲染,会有重复渲染的部分。
  • 设置:光源可以设置Render Mode,根据Render Mode 和 Quality Setting 中设置的 Pixel Light Count 来判断是否逐像素计算
  • 两种Pass:
    • Base Pass:
      实现:光照纹理、环境光、自发光、阴影(平行光的阴影);
      一个逐像素的平行光,所有逐顶点、SH 光源
      模板:Tag{“LightMode” = “ForwardBase”}
      #pragma multi_compile_fwbase
    • Additional Pass:
      实现:默认情况下不支持阴影,但可以通过使用 #pragma multi_compile_fwdadd_fullshadows 来开启
      除了 Base Pass 之外影响该物体的逐像素光源,每个光源执行一次 Pass
      模板:Tags{“LightMode” = “ForwardAdd”}
      Blend One One
      #pragma multi_compile_fwdadd
  • 在 Unity 使用前向渲染通道可以得到对应的

延迟渲染路径

  • 原理:一般是两个 Pass,第一个 Pass 用来对场景中所有的片元进行 G缓冲,即当前片元可见则把其信息存储到 G缓冲区;在第二个 Pass 中,利用 G缓冲区的各个片元信息进行真正的光照计算。相当于是整体判断再统一做渲染。
  • 总结: 对于场景中光源多的情况下,但是存在一些缺点。

总结

这次介绍比较笼统浅显,主要是对两种渲染路径的理解,以后会进行扩充,并对一些概念进行深入讲解。

0%